package daily.apr0412;

interface MyInterface {
    void method1(); // 抽象方法

    void method2();
}

//实现接口
class MyInterfaceImpl implements MyInterface {
    @Override
    public void method1() {
        System.out.println("实现类覆盖重写了方法！111");
    }

    @Override
    public void method2() {
        System.out.println("实现类覆盖重写了方法！222");
    }
}

public class AnonymousInnerClassTest {
    public static void main(String[] args) {
//        MyInterface obj = new MyInterfaceImpl();
//        obj.method1();
//        MyInterface some = new MyInterface(); // 错误写法！

// 使用匿名内部类，但不是匿名对象，对象名称就叫objA
        MyInterface objA = new MyInterface() {
            @Override
            public void method1() {
                System.out.println("匿名内部类实现了方法！111-A-method1");
            }

            @Override
            public void method2() {
                System.out.println("匿名内部类实现了方法！222-A-method2");
            }
        };
        objA.method1();
        objA.method2();
        System.out.println("=================");

//使用了匿名内部类，而且省略了
//对象名称，也是匿名对象
        new MyInterface() {
            @Override
            public void method1() {
                System.out.println("匿名内部类实现了方法！111-B-method1");
            }

            @Override
            public void method2() {
                System.out.println("匿名内部类实现了方法！222-B-method2");
            }
        }.method1();
        System.out.println("=================");
// 因为匿名对象无法调用第二次方法，
//所以需要再创建一个匿名内部类的匿名对象
        new MyInterface() {
            @Override
            public void method1() {
                System.out.println("匿名内部类实现了方法！111-C-method1");
            }

            @Override
            public void method2() {
                System.out.println("匿名内部类实现了方法！222-C-method2");
            }
        }.method2();
    }
}